package com.swj.modules.system.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.swj.common.core.model.SysConfig;
import com.swj.common.core.constant.CacheConstants;
import com.swj.common.core.text.Convert;
import com.swj.common.core.utils.SysStringUtil;
import com.swj.common.redis.service.IRedisService;
import com.swj.modules.system.mapper.SysConfigMapper;
import com.swj.modules.system.service.ISysConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


/**
 * 参数配置 服务层实现
 *
 * @author ruoyi
 */
@Service
public class SysConfigServiceImpl implements ISysConfigService {
    @Autowired
    private SysConfigMapper configMapper;

    @Autowired
    private IRedisService redisService;

//    /**
//     * 项目启动时，初始化参数到缓存
//     */
//    @PostConstruct
//    public void init() {
//        loadingConfigCache();
//    }

    /**
     * 根据键名查询参数配置信息
     *
     * @param configKey 参数key
     * @return 参数键值
     */
    @Override
    public String selectConfigByKey(String configKey) {
        String configValue = Convert.toStr(redisService.getObject(this.getCacheKey(configKey)));
        if (SysStringUtil.isNotBlank(configValue)) {
            return configValue;
        }
        QueryWrapper<SysConfig> wrapper = new QueryWrapper();
        wrapper.eq("config_key", configKey);
        SysConfig retConfig = configMapper.selectOne(wrapper);
        if (SysStringUtil.isNotNull(retConfig)) {
            redisService.setObject(this.getCacheKey(configKey), retConfig.getConfigValue());
            return retConfig.getConfigValue();
        }
        return SysStringUtil.EMPTY;
    }


    /**
     * 清空参数缓存数据
     */
//    @Override
//    public void clearConfigCache() {
//        Collection<String> keys = redisService.keys(CacheConstants.SYS_CONFIG_KEY + "*");
//        redisService.deleteObject(keys);
//    }

    /**
     * 重置参数缓存数据
     */
//    @Override
//    public void resetConfigCache()
//    {
//        clearConfigCache();
//        loadingConfigCache();
//    }

    /**
     * 校验参数键名是否唯一
     *
     * @param config 参数配置信息
     * @return 结果
     */
//    @Override
//    public String checkConfigKeyUnique(SysConfig config)
//    {
//        Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId();
//        SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey());
//        if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue())
//        {
//            return UserConstants.NOT_UNIQUE;
//        }
//        return UserConstants.UNIQUE;
//    }

    /**
     * 设置cache key
     *
     * @param configKey 参数键
     * @return 缓存键key
     */
    private String getCacheKey(String configKey) {
        return CacheConstants.SYS_CONFIG_KEY + configKey;
    }
}
